import axios from 'axios'
import { Message } from 'iview'
import store from '@/store'
import router from '@/router'

class HttpRequest {
  constructor(baseUrl = baseURL) {
    this.baseUrl = baseUrl
    this.queue = {}
  }
  // getInsideConfig() {
  //   const config = {
  //     baseURL: this.baseUrl,
  //     headers: {
  //       Authorization: store.state.user.access_token ? `Bearer ${store.state.user.access_token}` : ''
  //     }
  //   }
  //   return config
  // }
  getInsideConfig() {
    const config = {
      baseURL: this.baseUrl,
      headers: {
        Authorization: ''
      }
    }
    return config
  }
  destroy(url) {
    delete this.queue[url]
    if (!Object.keys(this.queue).length) {
      // Spin.hide()
    }
  }
  interceptors(instance, url) {
    // 请求拦截
    instance.interceptors.request.use(
      config => {
        // 添加全局的loading...
        if (!Object.keys(this.queue).length) {
          // Spin.show() // 不建议开启，因为界面不友好
        }
        this.queue[url] = true
        return config
      },
      error => {
        return Promise.reject(error)
      }
    )
    // 响应拦截
    instance.interceptors.response.use(
      res => {
        this.destroy(url)
        const { data } = res
        if (data.status !== 1) {
          if (data.message) {
            Message.error(data.message)
          }
          return Promise.reject(data.message)
        }
        return data
      },
      error => {
        this.destroy(url)
        console.error(error)
        // Message.error(error)
        return Promise.reject('伺服器出錯：' + error)
        // switch (error.response.status) {
        //   case 400:
        //     error.message = '请求错误(400)'
        //     break
        //   case 401:
        //     error.message = '未授权，请重新登录(401)'
        //     store.dispatch('handleLogOut')
        //     router.replace({ name: 'login' })
        //     break
        //   case 403:
        //     error.message = '拒绝访问(403)'
        //     break
        //   case 404:
        //     error.message = '请求出错(404)'
        //     break
        //   case 408:
        //     error.message = '请求超时(408)'
        //     break
        //   case 500:
        //     error.message = '服务器错误(500)'
        //     break
        //   case 501:
        //     error.message = '服务未实现(501)'
        //     break
        //   case 502:
        //     error.message = '网络错误(502)'
        //     break
        //   case 503:
        //     error.message = '服务不可用(503)'
        //     break
        //   case 504:
        //     error.message = '网络超时(504)'
        //     break
        //   case 505:
        //     error.message = 'HTTP版本不受支持(505)'
        //     break
        //   default:
        //     error.message = `连接出错(${error.response.status})!`
        // }
      }
    )
  }
  request(options) {
    const instance = axios.create({
      timeout: 10000
    })
    options = Object.assign(this.getInsideConfig(), options)
    this.interceptors(instance, options.url)
    return instance(options)
  }
}
export default HttpRequest
